Extending capacity of a memory system is an important feature that allows running larger applications. However, there are different types of memory technologies (e.g., dynamic random access memory (DRAM), phase-change memory (PCM), Flash memory, static random access memory (SRAM), among others), that have different characteristics, such as capacity and latency. For example, high speed memories such as SRAM or DRAM memories do not have as extensive a capacity as slower speed high capacity memories such as PCM or Flash memories.
Accordingly, it is difficult using conventional techniques to connect, (e.g., stack), various memory types together in a hierarchical manner that allows them to communicate with one another and access memory in memory banks of one another. Additionally, using conventional techniques, it is difficult to have a hierarchical memory stack that appears as a unified memory space that addresses target latencies and bandwidths required for performing memory access operations.